package com.swn.common.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * 对象序列号和反序列化工具类
 * 
 * @author 陶召才
 * @Date 2016年4月5日  上午11:11:03
 *
 */
public class SerializableUtil {
	/**
	 * 把对象序列化到路径为path的文件内
	 * 
	 * @author 陶召才
	 * @Date 2016年4月11日  下午5:04:00
	 *
	 * @param path
	 * @return
	 *
	 * @return Object
	 * @throws Exception 
	 */
	public static Object readObjFromFile(String path) throws Exception {
		File f = new File(path);
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(new FileInputStream(f));
			return ois.readObject();
		} catch (Exception e) {
			throw new Exception(e);
		}finally{
			try {
				if(ois!=null){
					ois.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}

	/**
	 * 从文件中反序列化为对象
	 * 
	 * @author 陶召才
	 * @Date 2016年4月11日  下午5:04:10
	 *
	 * @param object
	 * @param path  ：绝对路径写法
	 *
	 * @return void
	 * @throws Exception 
	 */
	public static void writeObjToFile(Object object, String path) throws Exception  {
		/** 如文件目录不存在，则创建目录**/
		  int k = path.lastIndexOf("/");
		  if(k==-1){
			  k = path.lastIndexOf("\\");
		  }
		  if(k==-1){
			  throw new Exception("路径不正确");
		  }
		  
			String dir = path.substring(0,k);
			if(!"".equals(dir)){
				File dirFile = new File(dir);
				if(!dirFile.exists()&&!dirFile.isDirectory()){
					dirFile.mkdirs();
				}	
			}
		
		File f = new File(path);
		ObjectOutputStream oos = null;
		try {
			oos = new ObjectOutputStream(new FileOutputStream(f));
			oos.writeObject(object);
		} catch (Exception e) {
			throw new Exception(e);
		}finally{
			try {
				if(oos!=null){
					oos.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		

	}
	
	public static void main(String[] args) throws Exception {

		Map<String,String> map = new HashMap<String,String>();
		map.put("1", "123");
		String path ="e:/1/2/3/4/map.bat";		
		//path ="e:\\1\\2\\3\\4\\map.bat";
		
		writeObjToFile(map, path);
		Map rmap = (Map)readObjFromFile(path);
		System.out.println(rmap.get("1"));
	}

	

}
